Spring Boot ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋: Spring Data JPA ํ์ฉํ๊ธฐ
์๋ฐ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๋ถ๋ถ์ ๋๋ค. Spring Data JPA๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณต์กํ SQL ์ฟผ๋ฆฌ ์์ฑ ์์ด๋ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. 2026๋ ๊ธฐ์ค ์ค๋ฌด์์ ๊ฐ์ฅ ๊ถ์ฅ๋๋ ์ฐ๋ ๋ฐฉ์์ ์ ๋ฆฌํฉ๋๋ค.
1. ์์กด์ฑ ์ถ๊ฐ (Dependencies)
Maven (pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>Gradle (build.gradle)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
}2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ (application.properties)
DB ์ ์ ์ ๋ณด๋ฅผ ์ค์ ํ์ผ์ ๊ธฐ์ ํฉ๋๋ค.
# H2 ์ธ๋ฉ๋ชจ๋ฆฌ DB ์ค์ ์์
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
# JPA ์์ธ ์ค์
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true3. ํต์ฌ ๊ตฌ์ฑ ์์
โ ์ํฐํฐ (Entity)
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ ๋งคํ๋ ์๋ฐ ํด๋์ค์ ๋๋ค.
@Entity
@Getter @Setter
public class User {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
private String email;
}โก ๋ฆฌํฌ์งํ ๋ฆฌ (Repository)
์ธํฐํ์ด์ค ์ ์ธ๋ง์ผ๋ก ๊ธฐ๋ณธ์ ์ธ CRUD ๊ธฐ๋ฅ์ ์ ๊ณต๋ฐ์ต๋๋ค.
public interface UserRepository extends JpaRepository<User, Long> {
// ๋ฉ์๋ ์ด๋ฆ๋ง์ผ๋ก ์ฟผ๋ฆฌ ์์ฑ ๊ฐ๋ฅ
Optional<User> findByEmail(String email);
}4. ์๋น์ค ๋ ์ด์ด์์์ ์ฌ์ฉ
๋น์ฆ๋์ค ๋ก์ง์ @Service ํด๋์ค์์ ๊ตฌํํ๋ฉฐ, @Transactional ์ด๋
ธํ
์ด์
์ ํตํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
@Transactional
public Long join(User user) {
userRepository.save(user);
return user.getId();
}
}5. ์์ฝ ๋ฐ ์ฃผ์์ฌํญ
- N+1 ๋ฌธ์ : ์ฐ๊ด ๊ด๊ณ ์กฐํ ์ ๋ถํ์ํ ์ฟผ๋ฆฌ๊ฐ ๋ง์ด ๋๊ฐ๋ ํ์์ ์ฃผ์ํด์ผ ํฉ๋๋ค. (Fetch Join ๋ฑ์ผ๋ก ํด๊ฒฐ)
- ์์์ฑ ์ปจํ ์คํธ: JPA๊ฐ ๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๊ฐ์งํ์ฌ DB์ ๋ฐ์ํ๋ ์๋ฆฌ๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
- DB ๋ ๋ฆฝ์ฑ: Spring Data JPA๋ฅผ ์ฐ๋ฉด ์ฝ๋๋ ๊ทธ๋๋ก ๋๊ณ ์ค์ ๋ง ๋ฐ๊ฟ์ ๋ค๋ฅธ ์ข ๋ฅ์ DB๋ก ์ฝ๊ฒ ์ ํํ ์ ์์ต๋๋ค.
์ด์ ๋ณต์กํ JDBC ์ฝ๋ ๋์ JPA๋ก ๊น๋ํ๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํด ๋ณด์ธ์!